<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="dxeXE" id="dxeXE"><span data-lake-id="ua37712eb" id="ua37712eb">典型回答</span></h1>
  <p data-lake-id="u30d6f81a" id="u30d6f81a"><br></p>
  <p data-lake-id="ud7466595" id="ud7466595"><span data-lake-id="u58a3dcfc" id="u58a3dcfc">所谓一致性，是指数据在多个副本之间是否能够保持一致的特性。再聊一致性的时候，其实要搞清楚一致性模型。（概念挺多，但是没办法，这玩意它本身就是理论。想结合代码、示例都做不到，甚至想着画个图都不知道该如何下手）</span></p>
  <p data-lake-id="u5b0e6ce4" id="u5b0e6ce4"><br></p>
  <p data-lake-id="u3869cc58" id="u3869cc58"><span data-lake-id="ufcb1d78d" id="ufcb1d78d">分布式系统中的一致性模型是一组管理分布式系统行为的规则。它决定了在分布式系统中如何访问和更新数据，以及如何将这些更新提供给客户端。面对网络延迟和局部故障等分布式计算难题，分布式系统的一致性模型对保证系统的一致性和可靠性起着关键作用。在分布式系统中有多种一致性模型可用，每个模型都有其优点和缺点，选择模型取决于系统的具体要求。</span></p>
  <p data-lake-id="u9890d4a6" id="u9890d4a6"><span data-lake-id="u3b3bc99a" id="u3b3bc99a">​</span><br></p>
  <p data-lake-id="uaebabe20" id="uaebabe20"><span data-lake-id="ub93c2875" id="ub93c2875">大的分类上面，主要有三种，分别是</span><strong><span data-lake-id="ub81cc78b" id="ub81cc78b">强一致性、弱一致性</span></strong><span data-lake-id="ue842e125" id="ue842e125">和</span><strong><span data-lake-id="uabeb65a3" id="uabeb65a3">最终一致性</span></strong><span data-lake-id="u94728bfe" id="u94728bfe">：</span></p>
  <p data-lake-id="u81e4db3d" id="u81e4db3d"><strong><span data-lake-id="u29666c0c" id="u29666c0c">​</span></strong><br></p>
  <ul list="u1beb3d89">
   <li fid="u315223a2" data-lake-id="uf63e494a" id="uf63e494a"><strong><span data-lake-id="u385bfa50" id="u385bfa50">强一致性模型</span></strong><span data-lake-id="u33aa5cb6" id="u33aa5cb6">（Strong Consistency）： 在强一致性模型下，系统保证每个读操作都将返回最近的写操作的结果，即任何时间点，客户端都将看到相同的数据视图。这包括线性一致性（Linearizability）、顺序一致性（Sequential Consistency）和严格可串行性（Strict Serializability）等子模型。强一致性模型通常牺牲了可用性来实现数据一致性。</span></li>
  </ul>
  <p data-lake-id="u6b64eae9" id="u6b64eae9"><br></p>
  <ul list="u1beb3d89" start="2">
   <li fid="u315223a2" data-lake-id="u5428daab" id="u5428daab"><strong><span data-lake-id="uf6a9bb1f" id="uf6a9bb1f">弱一致性模型</span></strong><span data-lake-id="u25ef3e7b" id="u25ef3e7b">（Weak Consistency）： 弱一致性模型放宽了一致性保证，它允许在不同节点之间的数据访问之间存在一定程度的不一致性，以换取更高的性能和可用性。这包括因果一致性（Causal Consistency）、会话一致性（Session Consistency）和单调一致性（Monotonic Consistency）等子模型。弱一致性模型通常更注重可用性，允许一定程度的数据不一致性。</span></li>
  </ul>
  <p data-lake-id="u4618fabd" id="u4618fabd"><br></p>
  <ul list="u1beb3d89" start="3">
   <li fid="u315223a2" data-lake-id="u90c904b6" id="u90c904b6"><strong><span data-lake-id="u359ef3a9" id="u359ef3a9">最终一致性模型</span></strong><span data-lake-id="uff81ec62" id="uff81ec62">（Eventual Consistency）： 最终一致性模型是一种最大程度放宽了一致性要求的模型。它允许在系统发生分区或网络故障后，经过一段时间，系统将最终达到一致状态。这个模型在某些情况下提供了很高的可用性，但在一段时间内可能会出现数据不一致的情况。</span></li>
  </ul>
  <p data-lake-id="ue2fd092b" id="ue2fd092b"><br></p>
  <h3 data-lake-id="Sh6hW" id="Sh6hW"><span data-lake-id="u20832229" id="u20832229">线性一致性 &amp; 顺序一致性</span></h3>
  <p data-lake-id="u1c4e6a82" id="u1c4e6a82"><br></p>
  <p data-lake-id="u96e1d2d9" id="u96e1d2d9"><span data-lake-id="uf26f36f9" id="uf26f36f9">线性一致性（Linearizability）和顺序一致性（Sequential Consistency）是两种强一致性模型。</span></p>
  <p data-lake-id="u1620cf12" id="u1620cf12"><span data-lake-id="u9372b093" id="u9372b093">​</span><br></p>
  <p data-lake-id="ua3572a7d" id="ua3572a7d"><strong><span data-lake-id="u015b72f3" id="u015b72f3">线性一致性是一种最强的一致性模型，它强调在分布式系统中的任何时间点，读操作都应该返回最近的写操作的结果。</span></strong></p>
  <p data-lake-id="uafaef68f" id="uafaef68f"><span data-lake-id="u6000b728" id="u6000b728">​</span><br></p>
  <p data-lake-id="ue2f16680" id="ue2f16680"><span data-lake-id="u4ec4ad5b" id="u4ec4ad5b">举个例子，如果操作A在操作B之前成功完成，那么操作B在序列化中应该看起来在操作A之后发生，即操作A应该在操作B之前完成。</span><strong><span data-lake-id="uab249323" id="uab249323">线性一致性强调实时性，确保操作在实际时间上的顺序保持一致。</span></strong></p>
  <p data-lake-id="ua3971d48" id="ua3971d48"><strong><span data-lake-id="ud3ef68ba" id="ud3ef68ba">​</span></strong><br></p>
  <p data-lake-id="uf661a05f" id="uf661a05f"><strong><span data-lake-id="u9bfe6064" id="u9bfe6064">顺序一致性也是一种强一致性模型，但相对于线性一致性而言，它放宽了一些限制。</span></strong><span data-lake-id="u91388c29" id="u91388c29">在顺序一致性模型中，系统维护一个全局的操作顺序，以确保每个客户端看到的操作顺序都是一致的。</span></p>
  <p data-lake-id="u08049466" id="u08049466"><span data-lake-id="u0dc0b7cf" id="u0dc0b7cf">​</span><br></p>
  <p data-lake-id="ube2d0f4c" id="ube2d0f4c"><strong><span data-lake-id="ufbd45592" id="ufbd45592">与线性一致性不同，顺序一致性不强调实时性，只要操作的顺序是一致的，就可以接受一些延迟。</span></strong></p>
  <p data-lake-id="u01fe9d4d" id="u01fe9d4d"><br></p>
  <p data-lake-id="ue865a130" id="ue865a130"><span data-lake-id="u1d2cd84b" id="u1d2cd84b">他们的主要区别在于强调</span><strong><u><span data-lake-id="u5ab373eb" id="u5ab373eb">实时性</span></u></strong><span data-lake-id="u4cfa5a29" id="u4cfa5a29">。线性一致性要求操作在实际时间上的顺序保持一致，而顺序一致性只要求操作的顺序是一致的，但不一定要求操作的实际时间顺序。</span></p>
  <p data-lake-id="u7ccdbd83" id="u7ccdbd83"><br></p>
  <p data-lake-id="u53ab3edb" id="u53ab3edb"><br></p>
  <h3 data-lake-id="Ne0qX" id="Ne0qX"><span data-lake-id="u9f24545f" id="u9f24545f">顺序一致性 &amp; 最终一致性</span></h3>
  <p data-lake-id="u2d26b0cc" id="u2d26b0cc"><br></p>
  <p data-lake-id="u60456141" id="u60456141"><span data-lake-id="u96556ffc" id="u96556ffc">很多人看完线性一致性和顺序一致性的区别之后，会容易懵，看上去顺序一致性和我们理解的最终一致性有点像？</span></p>
  <p data-lake-id="ub6cfd83b" id="ub6cfd83b"><span data-lake-id="ud24467a0" id="ud24467a0">​</span><br></p>
  <p data-lake-id="u77a373ad" id="u77a373ad"><span data-lake-id="u706829e0" id="u706829e0">那么他们的区别是啥呢？</span></p>
  <p data-lake-id="u471d439e" id="u471d439e"><span data-lake-id="u82346c1f" id="u82346c1f">​</span><br></p>
  <p data-lake-id="ua7687cce" id="ua7687cce"><span data-lake-id="u594aee5e" id="u594aee5e">在时间上，虽然顺序一致性和最终一致性都不强要求实时性，但是最终一致性的时间放的会更宽。并且最终一致性其实并不强调顺序，他只需要保证最终的结果一致就行了，而顺序一致性要求操作顺序必须一致。</span></p>
  <p data-lake-id="uac412c01" id="uac412c01"><span data-lake-id="u800cb46c" id="u800cb46c">​</span><br></p>
  <p data-lake-id="u56e2fed8" id="u56e2fed8"><span data-lake-id="u8f2e52c7" id="u8f2e52c7">并且，顺序一致性还是一种强一致性，比如在Zookeeper中，其实就是通过ZAB算法来保证的顺序一致性，即各个节点之间的写入顺序要求一致。并且要半数以上的节点写入成功才算成功。所以，顺序一致性的典型应用场景就是数据库管理系统以及分布式系统。</span></p>
  <p data-lake-id="u5aff1dd8" id="u5aff1dd8"><span data-lake-id="uc013809b" id="uc013809b">​</span><br></p>
  <p data-lake-id="u163ed473" id="u163ed473"><span data-lake-id="ub45b3449" id="ub45b3449">而最终一致性通常适用于互联网三高架构的业务开发，如电商网站，社交媒体网站等。</span></p>
 </body>
</html>